home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1993 / MacHack 1993.toast / MacHack™ 1987-1992 / MacHack™ '90 / Other Stuff / Demos ƒ / Demo AppMaker / Demo AppMaker™ / Demo AppMaker™.rsrc / TmpP_151_Menu.File < prev    next >
Encoding:
Text File  |  1990-03-23  |  5.4 KB  |  298 lines

  1. { %filename% }
  2. { Created %date% %time% by AppMaker }
  3.  
  4. Unit %UnitName%;
  5. Interface
  6.  
  7. Uses
  8. %if lang = MPW%
  9.     {$Load ToolBox.dump}
  10.         MemTypes,
  11.         QuickDraw,
  12.         OSIntf,
  13.         ToolIntf,
  14.         PackIntf,
  15.     {$Load}
  16.  
  17. %end if%
  18. %if lang = Think%
  19. {$ifc undefined Think_Pascal}
  20.     ListManager,
  21. {$endc}
  22. %end if%
  23.     %for each menuItem gen usesDialog%
  24.     Globals,
  25.     ResourceDefs,
  26.     Dispatcher,
  27.     Miscellany;
  28.  
  29. {----------}
  30. Procedure Init%MenuName%M;
  31. Function  OkToOpen (fType:    OSType): boolean;
  32. Procedure OpenFile (fileName:    Str255;
  33.                     vRefNum:    integer);
  34. Procedure Open0Files;
  35. Procedure DoClose;
  36. Procedure Do%MenuName% (itemNr:    integer);
  37.  
  38. {----------}
  39. Implementation
  40.  
  41. const
  42.     dialogTop        = 75;
  43.     dialogLeft        = 85;
  44.  
  45. var
  46.     numOpenTypes:    integer;
  47.     openTypeList:    SFTypeList;
  48.  
  49. %if lang = MPW%
  50. {$D+}
  51. {$R+}
  52. {$OV+}
  53. {$S %unitname%}
  54.  
  55. %end if%
  56. {----------}
  57. Procedure Init%MenuName%M;
  58. Begin
  59.     numOpenTypes := 1;
  60.     openTypeList [0] := 'TEXT';
  61. End; {Init%MenuName%M}
  62.  
  63. {----------}
  64. Function OkToOpen {(fType:    OSType): boolean};
  65. var
  66.     i:                integer;
  67.     status:            (searching, found, notFound);
  68. Begin
  69.     i := 0;
  70.     status := searching;
  71.     while status = searching do begin
  72.         if i >= numOpenTypes then begin
  73.             status := notFound;
  74.         end else begin
  75.             if fType = openTypeList [i] then begin
  76.                 status := found;
  77.             end else begin
  78.                 i := i + 1;
  79.             end;
  80.         end;
  81.     end; {while}
  82.     OkToOpen := (status = found);
  83. End; {OkToOpen}
  84.  
  85. {----------}
  86. Function OpenApplFile (vRefNum:        integer;
  87.                        fName:        Str255;
  88.                    var fRefNum:        integer): boolean;
  89. var
  90.     ok:                boolean;
  91. Begin
  92.   { application-specific Open file }
  93.     ok := CheckOS (FSOpen (fName, vRefNum, fRefNum));
  94.     OpenApplFile := ok;
  95. End; {OpenApplFile}
  96.  
  97. {----------}
  98. Procedure CloseApplFile (fRefNum:    integer);
  99. var
  100.     ok:                boolean;
  101. Begin
  102.   { application-specific Close file }
  103.       if ord (cur^.windowKind) = 1 then begin {1st or only window in set}
  104.         ok := CheckOS (FSClose (fRefNum));
  105.     end;
  106. End; {CloseApplFile}
  107.  
  108. {----------}
  109. Procedure SaveApplFile (fRefNum:    integer);
  110. Begin
  111.   { application-specific Save file }
  112.     cur^.dirty := false;
  113. End; {SaveApplFile}
  114.  
  115. {----------}
  116. Function ReadApplFile (fRefNum:        integer): boolean;
  117. Begin
  118.   { application-specific Read file }
  119.       ReadApplFile := false;
  120. End; {ReadApplFile}
  121.  
  122. {----------}
  123. Procedure DoNew;
  124. var
  125.     nameHandle:        StringHandle;
  126.     name:            Str255;
  127. Begin
  128.     nameHandle := GetString (UntitledID);
  129.     name := nameHandle^^;
  130.     OpenWindows (name, 0, 0);
  131. End; {DoNew}
  132.  
  133. {----------}
  134. Procedure OpenFile {(fileName:    Str255;
  135.                      vRefNum:    integer)};
  136. var
  137.     fRefNum:        integer;
  138. Begin
  139.     if OpenApplFile (vRefNum, fileName, fRefNum) then begin
  140.         OpenWindows (fileName, vRefNum, fRefNum);
  141.     end; {if}    
  142. End; {OpenFile}
  143.  
  144. {----------}
  145. Procedure DoOpen;
  146. var
  147.     dialogOrigin:    Point;
  148.     sfInfo:            SFReply;
  149. Begin
  150.     SetPt (dialogOrigin, dialogLeft, dialogTop);
  151.     SFGetFile (dialogOrigin, '', nil, numOpenTypes, openTypeList, nil, sfInfo);
  152.     with sfInfo do begin
  153.         if good then begin
  154.             openFile (fName, vRefNum);
  155.         end;
  156.     end;
  157. End; {DoOpen}
  158.  
  159. {----------}
  160. Procedure Open0Files;
  161. Begin
  162.     DoNew;
  163. End; {Open0Files}
  164.  
  165. {----------}
  166. Procedure DoSaveAs;
  167. var
  168.     sfInfo:            SFReply;
  169.     fRefNum:        integer;
  170.     ok:                boolean;
  171.     prompt:            StringHandle;
  172.     suggestion:        Str255;
  173.     untitled:        StringHandle;
  174. Begin
  175.     prompt := GetString (SaveAsPromptID);
  176.     suggestion := '';
  177.  
  178.     with sfInfo do begin
  179.         if CreateFile (sfInfo, prompt^^, suggestion, 'XXXX', 'TEXT')
  180.         then begin
  181.             if cur^.fileNum <> 0 then begin
  182.                 CloseApplFile (cur^.fileNum);
  183.             end;
  184.             if OpenApplFile (vRefNum, fName, fRefNum) then begin
  185.                 SetWTitle (curWindow, fName);
  186.                 cur^.fileNum := fRefNum;
  187.                 cur^.volNum := vRefNum;
  188.                 SaveApplFile (cur^.fileNum);
  189.             end else begin {should never happen}
  190.                 untitled := GetString (UntitledID);
  191.                 SetWTitle (curWindow, untitled^^);
  192.                 cur^.fileNum := 0;
  193.                 cur^.volNum := 0;
  194.             end; {if}
  195.         end; {if}
  196.     end; {with}
  197. End; {DoSaveAs}
  198.  
  199. {----------}
  200. Procedure DoSave;
  201. Begin
  202.     if cur^.fileNum = 0 then begin
  203.         DoSaveAs;
  204.     end else begin
  205.         SaveApplFile (cur^.fileNum);
  206.     end;
  207. End; {DoSave}
  208.  
  209. {----------}
  210. Procedure CloseApplWindow;
  211. const
  212.     saveItem        = 1;
  213.     cancelItem      = 2;
  214.     discardItem     = 3;
  215.     
  216. var
  217.     curTitle:        Str255;
  218.     itemNum:        integer;
  219.     ok:                boolean;
  220. Begin
  221.     ok := true;
  222.     SetInfo (FrontWindow);
  223.     if cur^.dirty then begin
  224.         GetWTitle (curWindow, curTitle);
  225.         ParamText (curTitle, '', '', '');
  226.         InitCursor;
  227.         itemNum := Alert (SaveID, nil);
  228.         Case itemNum of
  229.             saveItem: begin
  230.                     DoSave;
  231.                     ok := not errorFlag;
  232.                 end;
  233.             discardItem:
  234.                    {Do nothing};
  235.             cancelItem: begin
  236.                     errorFlag := true;
  237.                     ok := false;
  238.                 end;
  239.         end; {case}
  240.     end;
  241.     if ok then begin
  242.         if cur^.fileNum <> 0 then begin
  243.             CloseApplFile (cur^.fileNum);
  244.         end;
  245.         CloseCurWindow;
  246.     end;
  247. End; {CloseApplWindow}
  248.  
  249. {----------}
  250. Procedure DoClose;
  251. var
  252.     frontPeek:        WindowPeek;
  253. Begin
  254.     errorFlag := false;
  255.  
  256.     frontPeek := WindowPeek (FrontWindow);
  257.     if frontPeek^.windowKind < 0 then begin
  258.         CloseDeskAcc (frontPeek^.windowKind);
  259.     end else if frontPeek^.windowKind = dialogKind then begin
  260.         CloseModelessDialog (FrontWindow);
  261.     end else begin
  262.         CloseApplWindow;
  263.     end;
  264. End; {DoClose}
  265.  
  266. {----------}
  267. Procedure DoQuit;
  268. var
  269.     quitting:        boolean;                             
  270. Begin
  271.     quitting := true;
  272.     while quitting and (FrontWindow <> nil) do begin
  273.         SystemTask;
  274.         DoClose;
  275.         if errorFlag then begin
  276.             quitting := false;
  277.         end;
  278.     end; {while}
  279.     
  280.     if quitting then begin
  281.         quittingTime := true;
  282.     end;
  283. End; {DoQuit}
  284.  
  285. %for each menuitem gen doItem%
  286. {----------}
  287. Procedure Do%MenuName% {(itemNr:    integer)};
  288. Begin
  289.     errorFlag := false;
  290.  
  291.     case itemNr of
  292.         0:    ;
  293.         %for each menuitem gen handleitem%
  294.     end; {case}
  295. End; {Do%MenuName%}
  296.  
  297. End. {%UnitName%}
  298.